package com.fpx.open.platform.service;

import java.util.Date;
import java.util.List;

import com.fpx.open.platform.domain.Application;
import com.fpx.open.platform.domain.Customer;
import com.fpx.open.platform.domain.UserInfo;
import com.fpx.open.platform.domain.UserInfoExt;
import com.fpx.open.platform.domain.exception.ServiceException;

/**
 * 客户服务接口,包括查询，更新和验证权限功能
 * 
 * @author sunkey
 * @date Mar 25, 2013 10:37:17 AM
 * @version 1.0.0
 * @copyright fpx.com
 */
public interface CustomerService {

	/**
	 * 验证帐户,针对application的验证
	 * 
	 * @param customerId
	 * @param token
	 * @param  appId 应用ID
	 * @param ip 客户端ip
	 * @return 错误码，检验通过返回null
	 * @throws ServiceException 出现运行时异常或者数据库异常都会抛出此异常
	 */
	 String securityValidate(Integer customerId, String token,
			Integer appId, String ip) throws NumberFormatException,
			ServiceException;

	 /**
	 * 根据用户token查询用户信息
	 *
	 * @param token
	 * @return 用户对象
	 * @throws ServiceException
	 */
	UserInfo queryUserInfo(String token) throws ServiceException;
	
	/**
	 * 查询用户信息
	 *
	 * @param userName
	 * @param password
	 * @return 用户信息
	 * @throws ServiceException
	 */
	UserInfo queryUserInfo(String userName, String password) throws ServiceException;
		
	/**
	 * 根据用户老api的token查询用户信息
	 * 
	 * @param oldToken 老API的token
	 * @return 用户信息护展
	 * @throws ServiceException 出现运行时异常或者数据库异常都会抛出此异常
	 */
	UserInfoExt queryUserInfoExt(String oldToken) throws ServiceException;

	/**
	 * 更新用户token
	 * 
	 * @param UserId 用户Id
	 * @param token 用户令牌
	 * @param encryptDate 加密时间
	 * @throws ServiceException 出现运行时异常或者数据库异常都会抛出此异常
	 */
	void editAccountToken(Integer UserId, String token, Date encryptDate)
			throws ServiceException;

	/**
	 * 查询客户信息
	 * 
	 * @param customerId 客户id
	 * @return 客户信息
	 * @throws ServiceException 出现运行时异常或者数据库异常都会抛出此异常
	 */
	Customer queryCustomer(Integer customerId) throws ServiceException;
	
	/**
	 * 查询客户信息
	 *
	 * @param companyCode 客户公司编码，来于xms和oms
	 * @param customerType 客户类型 ，XMS OMS
	 * @return 客户信息
	 * @throws ServiceException 出现运行时异常或者数据库异常都会抛出此异常
	 */
	Customer queryCustomerByCompnayCode(String companyCode, String customerType) throws ServiceException;
	
	/**
	 * 查询用户有权访问的应用
	 *
	 * @param userId
	 * @return 应用列表
	 * @throws ServiceException 出现运行时异常或者数据库异常都会抛出此异常
	 */
	List<Application> queryApplications(Integer userId) throws ServiceException;
	
	/**
     * 根据用户ID查对应的客户信息
     * @param strUserId        用户ID
     * @return List<Customer>  客户信息列表
     */
    List<Customer> queryComapnyIdByUserId(String strUserId)throws ServiceException;
	

}
